package com.sg.common;

import com.fasterxml.jackson.annotation.JsonCreator;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * @Author: hze 浩月红
 * @Description: 接口错误码统一封装
 * @Date: create in 15:00 2022/7/23
 */
@AllArgsConstructor
@Getter
public enum CodeMsg {
    /**
     * 服务端未知错误  一般情况下严禁直接返回该错误  返回给前端的信息尽可能语义化  让用户了解如何修正
     */
    SERVER_ERROR(500, "服务错误"),
    YMMCW(5001, "密码错误"),
    SM4_ERROR(501, "加解密初始化错误"),
    SM2_INVALID_CIPHER_TEXT_ERROR(502, "SM2密钥无效"),
    GET_LOGIN_USER_ERROR(508, "获取登录用户信息失败"),
    OPERATE_ERROR(509, "用户请求受限"),
    ACCOUNT_LOCK(5091, "账户已锁定，10分钟后重试"),
    SYSTEM_ERROR(510, "缺少必要的环境变量"),
    PERMISSION_ERROR(500100, "英文名重复"),
    IDCARD_REPEAT(500101, "身份证重复"),
    PHONE_REPEAT(500102, "电话号码重复"),
    USERNAME_REPEAT(500103, "用户名重复"),
    USER_NULL(500104, "用户未注册"),
    OBJECT_NULL(500105, "对象为空"),
    XJ_OBJECT_NOTNULL(500106, "下级不为空"),
    USER_NOTNULL(500107, "下级不为空"),
    IDCARD_VERFIY_ERROR(500105, "身份比对失败"),
    YZM_ERROR(500500, "验证码错误"),
    MSG_ERROR(500501, "短信请求过于频繁"),
    NO_STARTTIME(500108, "该人员未录入报道时间或执行时间！"),
    UPLOAD_FILE_ERROR(500200, "文件上传失败"),
    MENU_ERROR(500300, "获取菜单出错"),
    OBJECT_ERROR(500400, "获取数据失败，请完善或修改相关信息"),
    XML_PARSE_ERROR(500600, "XML文件解析错误"),
    TASK_CANDIDATE_NOT_SET(500700, "任务执行人未设置"),
    XZQHDMISNULL(500800, "行政区划代码为空"),
    XZQHDMNOTEXISTED(500801, "行政区划代码不存在"),
    XZQHDMSHENG(500802, "行政区划代码需选择到省"),
    XZQHDMSHI(500803, "行政区划代码需选择到市"),
    XZQHDMQU(500804, "行政区划代码需选择到区"),
    XZQHDMXIANGZHEN(500805, "行政区划代码需选择到乡镇"),
    XZQHDMSHEQU(500806, "行政区划代码需选择到社区"),
    DATATYPE_ERROR(500900, "数据类型错误"),
    RYZT_ERROR(600100, "人员已存在该状态,请勿重复录入"),

    FDQDWSJ_EOOR(500901, "非当前单位数据， 无法进行该操作"),
    FBRSC_EOOR(500902, "非本人上传， 无法进行该操作"),

    PARAMETER_ERROR(400, "参数错误"),

    PARAMETER_KEY_ERROR(401, "凭证错误，请刷新页面或重启APP"),

    AUTH_ERROR(401, "认证失败或token过期"),

    FILE_ERROR(4010, "文件格式错误"),

    CERTIFICATION_ERROR(403, "用户名或密码错误"),

    CERTIFICATION_ERROR_GZ(403, "用户名或密码错误， 请核对账号密码是否正确，湖南用户请在左上角“切换站点”中选择湖南任意地区"),

    UN_APPROVAL_ERROR(40301, "用户尚未审批"),

    NO_APPROVAL_ERROR(40302, "用户审批未通过"),

    FROZEN_ERROR(40303, "用户已冻结"),

    DWXXISNULL_ERROR(40304, "用户单位信息为空"),

    ROLE_ERROR(404, "用户未授权"),

    EXCEL_IMPORT_FILE_NULL_ERROR(405, "file文件不存在或格式错误"),

    EXCEL_IMPORT_CHECK_NULL_ERROR(406, "模板必填项有空值，请补全数据"),

    EXCEL_IMPORT_DATA_REPEAT_ERROR(407, "导入失败，待导入的数据中存在重复数据（zddm、dm都相同）或已在数据库中存在，本次导入取消，请核对后再操作"),

    EXCEL_TRY_ERROR(408, "导入失败，请联系管理员"),

    JBXX_INSERT_SFZHCF_ERROR(601, "人员身份证重复!"),

    JBXX_INSERT_LXDHCF_ERROR(602, "人员联系电话重复!"),

    SUCCESS(0, "操作成功"),

    TIME_FORMAT_ERROR(235959, "日期时间格式错误"),

    APPROVAL_CALLBACK_FUNCTION(500510, "审批回调函数错误"),

    STATISTIC_REFLECT_ERROR(500515, "统计查询反射执行错误"),

    DASHBORD_FUNCTION_ERROR(500511, "dashbord接口错误"),

    SEARCH_PARAM_ERROR(6000, "全文检索参数错误"),

    SEARCH_TABLE_NAME_ERROR(6001, "全文检索参数错误"),

    DATE_PARSE_ERROR(500519, "日期格式错误"),

    REPEAT_ANNUAL_LEAVE(600101, "重复销假！"),

    START_TIME_MUST_AFTER_NOW(600102, "开始日期不能在当前日期之前！"),

    END_TIME_MUST_AFTER_START(600103, "结束日期不能在开始日期之前！"),

    ONLY_EDIT_NO_START_TASK(600104, "只能修改未开始的任务！"),

    NOTNULL(8977, "不能为空"),

    ZQ_NOT_NULL(8978, "周期不能为空或非周期"),

    SJ_LY_NOTNULL(8979, "数据来源[sjLy]不能为空"),

    TSTG_NOTNULL(8980, "新增脱失脱管[ejzt]不能为空"),

    LEAVE_DATA_NULL(8981, "请假数据不存在"),

    BH_NOTNULL(8982, "数据编号不能为空"),

    DWDM_NOTNULL(5992, "单位代码不能为空"),

    DW_NOT_FOUND(5993, "没有查询到此单位信息"),

    TJCX_PZ_DATA_NULL(9880, "统计查询配置数据不存在"),

    LEAVE_DATE_ERROR(8982, "已存在相同时间的请假记录，请修改请假时间"),
    ANNUAL_LEAVE_DATE_ERROR(8983, "请假还未开始，无法销假"),


    YZD_KC_OVER_ERROR(45622, "数量已超出库存，请重新输入"),
    DRUG_EXIST_ERROR(78800, "该人员已经在系统中，请勿重复提交"),
    YZD_DJ_ERROR(45002, "存在未确认的登记记录，请先确认后提交"),
    OBJECT_CANNOT_CHANGE(500106, "当前对象不可修改"),

    HJDQY_REPEAT_ERROR(9051, "已存在待确认迁移申请，请勿重复提交"),
    YDFW_REPEAT_ERROR(9051, "已存在待确认异地管控申请，请勿重复提交"),

    NOT_XCHD_ERROR(51001, "不是现场活动，无法上传"),

    NOT_CGCG_ERROR(51011, "不是场馆参观，无法上传"),
    CQ_XJHD_ERROR(510011, "活动已超期"),

    PASSWORD_ERROR(510011, "密码错误， 连续错误3次将退出当前账号"),

    ZYZ_RS_ERROR(51002, "志愿者已招满"),

    CG_DEL_ERROR(51003, "场馆存在待完成活动，不能删除"),
    CG_CG_YY_ERROR(51004, "场馆预约活动编号或场馆编号为空，预约失败"),
    CG_CG_YY_RS_ERROR(510041, "请正确填写场馆预约参观人数"),
    XJHD_CG_YY_ERROR(51005, "场馆预约活动不存在或活动已经结束，预约失败"),
    CG_BCZ_ERROR(51006, "场馆不存在或场馆处于闭馆状态，预约失败"),
    CG_YY_YCZ_ERROR(51007, "已存在此场馆的参观预约"),
    CG_YY_WYY_ERROR(51008, "没有您的预约信息"),
    CG_HX_BCZ_BG_ERROR(51009, "没有查询到场馆信息或场馆处于闭馆状态"),
    NOT_BDW_TW_ERROR(51010, "不是本单位下发的推文，不能删除"),
    NOT_NULL_TWBH_ERROR(51011, "行政推文编号不能为空"),
    NOT_NULL_CGBH_ERROR(51012, "场馆编号不能为空"),

    NULL_CG_FQ_ERROR(51013, "场馆分区不存在"),
    NULL_CG_ERROR(510131, "场馆不存在"),
    CFDK_CG_FQ_ERROR(51014, "重复打卡"),
    DKWWC_CG_FQ_ERROR(51015, "未完成所有打卡，获取积分失败"),
    CG_DK_JF_ERROR(51016, "场馆打卡积分配置错误，请联系管理员"),
    CF_HQ_JF_ERROR(51017, "已经成功获取过积分"),


    MANY_FACE(222202, "没有检测到人脸"),
    FACE_OCCLUSION(223113, "人脸有被遮挡"),
    FACE_BLUR(223114, "人脸模糊"),
    FACE_LIGHT(223115, "人脸光照不好"),
    FACE_INCOMPLETE(223116, "人脸不完整"),
    FACING_LENS(223116, "请正对镜头"),

    HAVE_OPNE_ID(51010, "请输入OPENID"),

    HAS_WARN(510111, "今天已经提醒过了"),

    ZYZ_ZT(51031, "志愿者已暂停"),

    USER_XZQHDM_NULL_ERROR(50005, "用户行政区划代码为空"),
    DUPLICATE_XZQHDM_XYS_ERROR(50006, "当前行政区划已存在协议书"),
    XZQHDM_XYS_NULL(50007, "没有查询到协议书"),
    QDTP_NOT_NULL(50008, "签订图片不能为空"),
    XYS_YQD_ERROR(50009, "协议书已签订"),
    CZ_SPZ_ERROR(50010, "存在审批中的记录"),
    CSSZD_NULL(60010, "请选择场所所在地"),

    HCQQ_WWC(70010, "还有未完成的核查任务"),
    NOT_ALLOW_UPDATE_FXDJ(50010101, "当前人员所处状态类型不允许修改风险等级"),

    SXT_YCZ(300001, "摄像头已存在"),
    SXT_XLH(300002, "摄像头序列号错误"),
    SXT_YZMWK(300003, "摄像头验证码为空"),
    SXT_YBZY(300004, "摄像头已被占用"),
    SXT_SBBCZ(300005, "设备不存在"),


    JM_IMPORT_GS_ERROR(78786, "本次导入失败，请按照导入模板格式进行导入"),
    JM_IMPORT_ERROR(784532, "本次导入失败，请联系管理员"),
    JM_IMPORT_BLANK_ERROR(78900, "未选择文件或者文件为空"),
    JM_IMPORT_NAME_ERROR(784566, "文件名异常"),
    JM_IMPORT_EXCEL_ERROR(78891, "请上传Excel格式文件"),
    JM_IMPORT_DATE_ERROR(78895, "销售时间格式化失败,格式化:yyyy/MM/dd HH:mm:ss"),

    WS_YBBH_EXIST(66990, "该样本编号已存在，请重新录入"),
    WS_RWZBH_MULTIPLE(66997, "所选样本不属于同一任务组，请重新勾选"),
    HX_BCZGSP(8001001, "核销失败，不存在该商品"),
    USER_XZQH_NULL_ERROR(50010102, "用户行政区划为空"),


    JF_SL_WK(8003001, "用户积分不足"),

    SB_BM_CF(8003002, "设备编码重复！"),


    XDRY_NOT_EXIST(100001, "吸毒人员不存在"),

    XDRY_LXR_EXIST(100090, "吸毒人员联系人已存在"),

    HYZH_NOT_EXIST(100100, "对应单位没有活跃账户，请线下联系"),

    RYDA_GZPZ(100077,"该区域已录入档案配置项，请直接进行编辑"),

    STOP_SEND_MSG(10086, "会话时间已过期，禁止发送"),

    FZR_BFH(100099,"选择的负责人与吸毒人员户籍地不符合"),

    SP_KCBZ(100098,"商品库存不足"),

    SP_JSSJ(100097,"超过结束时间，不能上架"),

    MBGL_CEPINGBIAOZHUN_CHONGFU(9001001,"测评标准重复"),
    MBGL_MUBIAO_FENGZHI(9001002,"目标标准分数超过100"),
    MBGL_DANWEILEIXING(9001003,"当前区划下没有该类型的单位"),
    MBGL_CHAIJIE_FENGZHI(9001004,"任务分值已超标准上限"),
    MBGL_BIAOZHUN_PINGFENG(9001005,"非加/扣分标准无法直接评分"),
    MBGL_MUBAN_MUBIAOBUCUNZAIBIAOZHUN(9001006,"目标不存在标准"),
    MBGL_MUBAN_DANWEIMUBANBUCUNZAI(9001007,"单位不存在标准模板"),
    MBGL_ZHOUQI_PINLV(9001008,"请填写周期频率"),
    MBGL_ZHOUQI_CUOWU(9001009,"任务周期内无法拆解周期频率"),
    MBGL_BIAOZHUN_CUNZAIRENWU(9001010,"标准已存在任务，无法编辑"),
    MBGL_RENWU_SHIJIAN_OUT(9001011,"任务周期不在目标周期范围内"),


    QY_WTX(200001,"未绑定企业，需要绑定"),

    XYDM_YBD(200002,"统一社会信用代码已经被绑定"),

    CSMD_IMPORT_ERROR(9001012, "请按照模板格式整理并上传文件"),

    EXCEL_MB_ERROR(7766509, "请上传正确的Excel模板"),

    SFZ_GS_ERROR(708722, "您的身份证格式不对，请检查是否正确"),

    RQ_GS_ERROR(708733, "您的日期格式不对，请参考模板填写"),
    XSSL_GS_ERROR(708744, "数量不能为负"),


    SB_ERROR(870099, "条形码识别失败"),
    ;

    private Integer status;
    private String msg;

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
    public static CodeMsg getByMsg(String msg) {
        for (CodeMsg codeMsg : CodeMsg.values()) {
            if (codeMsg.getMsg().equals(msg)) {
                return codeMsg;
            }
        }
        return null;
    }

    @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
    public static CodeMsg getByCode(Integer code) {
        for (CodeMsg codeMsg : CodeMsg.values()) {
            if (codeMsg.getStatus().equals(code)) {
                return codeMsg;
            }
        }
        return null;
    }
}

